package com.dc.juc.example._5_immutable;

import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;

import java.util.Collections;
import java.util.Map;


/**
 * Description: Collections 工具类，提供使容器变为不可变容器的处理
 *
 *      Collections.unmodifiableCollection();
 *      Collections.unmodifiableList();
 *      Collections.unmodifiableSortedSet();
 *      Collections.unmodifiableSet();
 *      Collections.unmodifiableSortedMap();
 *      Collections.unmodifiableMap();
 *      Collections.unmodifiableNavigableMap();
 *      Collections.unmodifiableNavigableSet();
 *
 * @author: gdc
 * @date: 2021/8/4
 * @version 1.0
 */
@Slf4j
public class Immutable2 {

    /**
     * 如果需要使用 Collections.unmodifiableMap()，将变量修改为不可变，则变量不能使用final修饰
     */
    private static Map<Integer, Integer> MAP = Maps.newHashMap();

    static {
        MAP.put(1, 2);
        MAP.put(3, 4);
        MAP.put(5, 6);

        // Collections.unmodifiableMap() 将Map修改为不可变对象
        // 源码分析：通过Collections.unmodifiableMap(), 返回一个不可变对象UnmodifiableMap（Collections的静态内部类），
        //      里面所有的修改方法都会抛出异常，以此避免数据被修改

        MAP = Collections.unmodifiableMap(MAP);
    }

    public static void main(String[] args){

        // 当前 MAP 为不可变对象，对其内容进行修改会抛出异常
        MAP.put(1, 10);
        log.info("{}", MAP);
    }

}
